package cn.juque.workflow.service.task;

import cn.juque.workflow.bo.businesstask.BusinessTaskDetailBO;
import cn.juque.workflow.bo.businesstask.BusinessTaskSaveBO;
import cn.juque.workflow.bo.businesstask.BusinessTaskUpdateBO;
import cn.juque.workflow.entity.BaseEntity;
import com.alibaba.fastjson2.JSONObject;

/**
 * @author juque
 * @version 1.0.0
 * <ul>
 *     <li>IBusinessTaskService</li>
 * </ul>
 * @date 2023-02-02 23:18:51
 **/
public interface IBusinessTaskService<T extends BaseEntity> {

    /**
     * 详情
     *
     * @param id 业务主键
     * @return BusinessTaskDetailBO
     */
    BusinessTaskDetailBO<T> detail(String id);

    /**
     * 详情
     *
     * @param taskId 任务主键
     * @return BusinessTaskDetailBO
     */
    BusinessTaskDetailBO<T> detailByTaskId(String taskId);

    /**
     * 创建实例前的操作
     *
     * @param saveBO 参数
     * @return 业务主键
     */
    String createInstanceBefore(BusinessTaskSaveBO saveBO);

    /**
     * 创建实例后的操作
     *
     * @param processInstanceId 流程实例ID
     * @param businessId        业务ID
     * @return 业务ID
     */
    String startInstanceAfter(String processInstanceId, String businessId);

    /**
     * 更新
     *
     * @param updateBO 参数
     * @return 业务主键
     */
    String update(BusinessTaskUpdateBO updateBO);

    /**
     * 删除，同时删除流程实例
     *
     * @param id 业务主键
     */
    void delete(String id);

    /**
     * json对象转entity
     *
     * @param jsonObject JSONObject
     * @return T
     */
    T toEntity(JSONObject jsonObject);

    /**
     * 任务完成后的操作
     * @param taskId 任务ID
     */
    void taskFinishAfter(String taskId);
}
